到目前為止,我們已經學習了不同的 Python 資料型態。通常,我們會將資料存儲在各種不同的檔案格式中。在本節中,我們將探討如何處理不同格式的檔案,例如 .txt
、.json
、.xml
、.csv
、.tsv
和 .excel
等檔案格式。首先,讓我們從最常見的 .txt
檔案格式開始,學習如何進行檔案操作。
檔案操作是程式設計中的重要部分,讓我們可以創建、讀取、更新和刪除檔案。在 Python 中,我們使用內建的 open()
函數來處理檔案。
# 語法
open('filename', mode) # mode(r, a, w, x, t, b) 用來讀取、追加、寫入、創建、文本或二進位檔案
"r"
表示讀取(Read) - 預設值。打開一個檔案進行讀取,如果檔案不存在則返回錯誤。"a"
表示追加(Append) - 打開一個檔案並在檔案末尾追加內容,如果檔案不存在則會創建。"w"
表示寫入(Write) - 打開一個檔案進行寫入,如果檔案存在則覆蓋檔案內容,檔案不存在則會創建。"x"
表示創建(Create) - 創建指定的檔案,如果檔案已存在則返回錯誤。"t"
表示文本模式(Text) - 預設模式,處理文本檔案。"b"
表示二進位模式(Binary) - 用於處理二進位檔案(例如圖片)。打開檔案的預設模式是讀取模式,因此我們不需要指定 r
或 rt
。假設已經創建並保存了一個名為 reading_file_example.txt
的檔案,讓我們看看如何讀取它:
f = open('./files/reading_file_example.txt')
print(f) # <_io.TextIOWrapper name='./files/reading_file_example.txt' mode='r' encoding='UTF-8'>
在上面的範例中,我們打印了已打開的檔案,並獲得了一些關於該檔案的資訊。已打開的檔案有不同的讀取方法:read()
、readline()
和 readlines()
。檔案打開後必須關閉,可以使用 close()
方法來完成。
read()
: 讀取整個檔案的內容並以字串形式返回。如果我們想限制讀取的字符數,可以傳遞一個整數參數給 read(number)
方法。
f = open('./files/reading_file_example.txt')
txt = f.read()
print(type(txt)) # <class 'str'>
print(txt)
f.close()
上面的範例中,我們讀取了整個檔案的內容。讓我們看看如何只讀取前 10 個字符:
f = open('./files/reading_file_example.txt')
txt = f.read(10)
print(txt) # This is an
f.close()
如果在關閉檔案後再次嘗試讀取,會引發 ValueError: I/O operation on closed file
錯誤。因此,請記得在讀取之前打開檔案,並在完成後關閉檔案。
readline()
: 讀取檔案的第一行內容。
f = open('./files/reading_file_example.txt')
line = f.readline()
print(line) # This is an example to show how to open a file and read.
f.close()
readlines()
: 讀取檔案的所有行,並以列表形式返回每一行。
f = open('./files/reading_file_example.txt')
lines = f.readlines()
print(lines) # ['This is an example to show how to open a file and read.\n', 'This is the second line of the text.I love python']
f.close()
若要寫入現有檔案,我們需要在 open()
函數中添加模式參數:
"a"
追加模式:將內容追加到檔案的末尾。如果檔案不存在,則創建一個新檔案。"w"
寫入模式:會覆蓋現有內容。如果檔案不存在,則創建一個新檔案。讓我們向檔案中追加一些文本:
with open('./files/reading_file_example.txt','a') as f:
f.write('This text has to be appended at the end')
接下來,創建一個新檔案並寫入一些文本:
with open('./files/writing_file_example.txt','w') as f:
f.write('This text will be written in a newly created file')
我們可以使用 os
模組來刪除檔案:
import os
os.remove('./files/writing_file_example.txt')
如果檔案不存在,remove
方法會引發 FileNotFoundError
錯誤,因此可以使用條件語句來檢查檔案是否存在:
import os
if os.path.exists('./files/writing_file_example.txt'):
os.remove('./files/writing_file_example.txt')
else:
print('檔案不存在')
txt
檔案txt
檔案是非常常見的資料形式,我們在上一節中已經介紹了。接下來,我們將探討 json
檔案。
json
檔案JSON 全稱為 JavaScript Object Notation,實際上它是一個字串化的 JavaScript 物件或Python 字典。
範例:
# 字典
person_dict = {
"name": "Asabeneh",
"country": "Finland",
"city": "Helsinki",
"skills": ["JavaScrip", "React", "Python"]
}
# JSON 字串形式
person_json = '''{
"name": "Asabeneh",
"country": "Finland",
"city": "Helsinki",
"skills": ["JavaScrip", "React", "Python"]
}'''
要將 JSON 轉換為 Python 字典,首先要匯入 json
模組,然後使用 loads
方法。
import json
# JSON
person_json = '''{
"name": "Asabeneh",
"country": "Finland",
"city": "Helsinki",
"skills": ["JavaScrip", "React", "Python"]
}'''
# 將 JSON 轉換為字典
person_dict = json.loads(person_json)
print(person_dict)
print(type(person_dict)) # <class 'dict'>
print(person_dict['name']) # Asabeneh
要將 Python 字典轉換為 JSON,可以使用 json.dumps
方法。
import json
person = {
"name": "Asabeneh",
"country": "Finland",
"city": "Helsinki",
"skills": ["JavaScrip", "React", "Python"]
}
# 將字典轉換為 JSON
person_json = json.dumps(person, indent=4)
print(person_json)
我們還可以將資料保存為 JSON 檔案:
import json
person = {
"name": "Asabeneh",
"country": "Finland",
"city": "Helsinki",
"skills": ["JavaScrip", "React", "Python"]
}
with open('./files/json_example.json', 'w', encoding='utf-8') as f:
json.dump(person, f, ensure_ascii=False, indent=4)
csv
檔案CSV(Comma Separated Values)是一種常見的數據格式,用於儲存表格資料。
範例:
"name","country","city","skills"
"Asabeneh","Finland","Helsinki","JavaScript"
讀取 CSV 檔案:
import csv
with open('./files/csv_example.csv') as f:
csv_reader = csv.reader(f, delimiter=',')
line_count = 0
for row in csv_reader:
if line_count == 0:
print(f'Column names are: {", ".join(row)}')
else:
print(f'{row[0]} lives in {row[1]}, {row[2]}.')
line_count += 1
print(f'Number of lines: {line_count}')
xlsx
檔案若要讀取 Excel 檔案,需要安裝 openpyxl
模組。
import openpyxl
excel_book = openpyxl.load_workbook('./files/excel_example.xlsx')
print(excel_book.sheetnames)
print(len(excel_book.sheetnames))
xml
檔案XML 是另一種結構化的資料格式,與 HTML 類似。
範例:
<?xml version="1.0"?>
<person gender="female">
<name>Asabeneh</name>
<country>Finland</country>
<city>Helsinki</city>
<skills>
<skill>JavaScrip</skill>
<skill>React</skill>
<skill>Python</skill>
</skills>
</person>
讀取 XML 檔案:
import xml.etree.ElementTree as ET
tree = ET.parse('./files/xml_example.xml')
root = tree.getroot()
print('Root tag:', root.tag)
print('Attribute:', root.attrib)
for child in root:
print('field: ', child.tag)